package org.java.gateway.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.reactive.EnableWebFluxSecurity;
import org.springframework.security.config.web.server.ServerHttpSecurity;
import org.springframework.security.web.server.SecurityWebFilterChain;

@Configuration
@EnableWebFluxSecurity
public class OAuthClientConfig {
    @Bean
    public SecurityWebFilterChain securityWebFilterChain(ServerHttpSecurity http) {
        // 排除不需要权限的路径，主要是登录地址、验证码等
        http.authorizeExchange()
                .pathMatchers(
                        "/favicon.ico",
                        "/*/actuator/**",
                        "/actuator/**",
                        "/oauth/login/code/*"
                )
                .permitAll();
        // 其他路径都需要授权
        // 一次请求、就会包含一个响应，请求和响应加在一起就是一个Exchange。
        http.authorizeExchange().anyExchange().authenticated();

        // 激活OAuth 2.0的登录
        http.oauth2Login();
        // 退出登录
        http.logout()
                // 退出登录的地址，需要加上/api
                .logoutUrl("/logout");
        // 禁用CSRF（防止跨站攻击），目的是为了给前端使用的时候能够跨站访问，不需要验证CSRF的令牌。
        http.csrf().disable();
        return http.build();
    }

}
